package ulht.ia;

import java.util.HashMap;
import Interface.*;
/**
 *
 * @author Administrador
 */
public class Disciplinas {
    // formato da lista é "código", "nome da disciplina"
    private HashMap<String, String> listaDisciplinas = new HashMap<>();

    /**
     * Devolve um hashmap com a lista de Disciplinas
     * @return HashMap<String, String> 
     */
    public HashMap<String, String> getListaDisciplinas() {
        return listaDisciplinas;
    }

    /**
     * Carrega um hashmap para a lista de Disciplinas
     * @param HashMap<String, String> listaDisciplinas 
     */
    public void setListaDisciplinas(HashMap<String, String> listaDisciplinas) {
        this.listaDisciplinas = listaDisciplinas;
    }

    /**
     * Carrega os valores por defeito: 7 Disciplinas
     */
    private void loadDefaults(){
        this.listaDisciplinas.put("000", "sem Disciplina");
        this.listaDisciplinas.put("001", "SI");
        this.listaDisciplinas.put("002", "BPM");
        this.listaDisciplinas.put("003", "TPSI");
        this.listaDisciplinas.put("004", "CPL");
        this.listaDisciplinas.put("005", "AS");
        this.listaDisciplinas.put("006", "ANA");
        this.listaDisciplinas.put("007", "BSE");
    }
    
    /**
     * Adiciona uma Disciplina à Lista de Disciplinas
     * 
     * @param codigo
     * @param nome 
     */
    public void addDisciplina(String codigo, String nome){
        this.listaDisciplinas.put(codigo, nome);
    }
    
    /**
     * Remove uma Disciplina da lista de Disciplinas
     * 
     * @param codigo
     * @return True se removido, False se código nao existir
     */
    public boolean removeDisciplina(String codigo){
        if (this.listaDisciplinas.containsKey(codigo)){
            this.listaDisciplinas.remove(codigo);
            return true;
        }
        return false;
    }
    
    /**
     * Edita uma Disciplina (remove a Disciplina existente e cria uma nova)
     * 
     * @param codigo
     * @param novoCodigo
     * @param nome
     * @return 1 se Ok, 0 se o novo código já existe, -1 se o código não existe
     */
    public int editDisciplina(String codigo, String novoCodigo, String nome){
        if (novoCodigo.equals(codigo)){
            if (this.listaDisciplinas.containsKey(codigo)){
                this.listaDisciplinas.remove(codigo);
                this.listaDisciplinas.put(novoCodigo, nome);
                return 1;
                } else {
                    return -1;
                }
        } else if (this.listaDisciplinas.containsKey(codigo)){
            if (!this.listaDisciplinas.containsKey(novoCodigo)){
                this.listaDisciplinas.remove(codigo);
                this.listaDisciplinas.put(novoCodigo, nome);
                return 1;
            } else {
                return 0;
            }
        }
        return -1;
    }

    /**
     * Construtor por defeito
     */
    public Disciplinas() {
        this.loadDefaults();
    }
    
    /**
     * Construtor com lista de disciplinas externa
     * @param listaDisciplinas 
     */
    public Disciplinas(HashMap<String, String> listaDisciplinas) {
        this.setListaDisciplinas(listaDisciplinas);
    }
    
}